FireBird - zaujimave pretypovanie (zaokruhlenie)
Otázka od: Roland Turcan
16. 12. 2002 22:47
Hello Delphi CZ konferencia!
mam SP kde
pocet_dni je integer;
denny_urok je numeric(11,2);
rocny_urok je numeric(11,2);
istina je numeric(11,2);
urokovy_koeficient je double precision;
if (ROCNY_UROK>0) then
BEGIN
UROKOVY_KOEFICIENT=ROCNY_UROK/365;
END ELSE
if (DENNY_UROK>0) then
UROKOVY_KOEFICIENT=DENNY_UROK;
UROK=ISTINA*POCET_DNI*UROKOVY_KOEFICIENT/100;
premenne maju hodnoty:
rocny_urok=17.6;
pocet_dni=684;
istina=230;
t.j.
urok=230*684*17.6/365/100;
ked si to hodite do "calc.exe" tak to je 75,858410958904109589041095890411
a SP mi vrati 62,928
dlho maturujem, ze co je trouble a zistil som ze v skripte sa vypocita
urokovy_koeficient ako 0.04 lebo 62.929=230*684*0.04/100;
proste ide ma j.bn.t!!!!
Preco ak som deklaroval urokovy_koeficient ako double precision tak mi
to oreze na dve desatinne?
Vycural som s nim tak, ze som opravil deklaraciu rocny_urok a denny_urok
na double precision a uz to funguje, ale nech mi pliz niekto vysvetli
tento paranormalny jav!
--
Best regards, TRoland
http://www.rotursoft.sk
Odpovedá: Skopalik Slavomir
16. 12. 2002 23:27
Jedna z mnoha klasickych chyb FB se zaokroulovanim a pretypovanim.
Vetsina techto problemu by mela byt odstranena v FB1.5.
Pokud toto nastava i ve FB 1.5, tak to zaloguj prosim na SourceForge.
Slavek
> Hello Delphi CZ konferencia!
>
> mam SP kde
>
> pocet_dni je integer;
> denny_urok je numeric(11,2);
> rocny_urok je numeric(11,2);
> istina je numeric(11,2);
> urokovy_koeficient je double precision;
>
> if (ROCNY_UROK>0) then
> BEGIN
> UROKOVY_KOEFICIENT=ROCNY_UROK/365;
> END ELSE
> if (DENNY_UROK>0) then
> UROKOVY_KOEFICIENT=DENNY_UROK;
>
> UROK=ISTINA*POCET_DNI*UROKOVY_KOEFICIENT/100;
>
> premenne maju hodnoty:
>
> rocny_urok=17.6;
> pocet_dni=684;
> istina=230;
>
> t.j.
>
> urok=230*684*17.6/365/100;
>
> ked si to hodite do "calc.exe" tak to je 75,858410958904109589041095890411
>
> a SP mi vrati 62,928
>
> dlho maturujem, ze co je trouble a zistil som ze v skripte sa vypocita
> urokovy_koeficient ako 0.04 lebo 62.929=230*684*0.04/100;
>
> proste ide ma j.bn.t!!!!
>
> Preco ak som deklaroval urokovy_koeficient ako double precision tak mi
> to oreze na dve desatinne?
> Vycural som s nim tak, ze som opravil deklaraciu rocny_urok a denny_urok
> na double precision a uz to funguje, ale nech mi pliz niekto vysvetli
> tento paranormalny jav!
>
> --
> Best regards, TRoland
> http://www.rotursoft.sk
>
Odpovedá: Petr Palicka aka PeC@
16. 12. 2002 23:18
Ahoj Roland,
> dlho maturujem, ze co je trouble a zistil som ze v skripte sa vypocita
> urokovy_koeficient ako 0.04 lebo 62.929=230*684*0.04/100;
no ba ze
nedavno tu psal Pavel Cisar, ze vysledny pocet mist vysledku je dany
prostym souctem desetinnych mist vsech operandu (nebo mozna trochu
kecam), takze:
pokud UROKOVY_KOEFICIENT=ROCNY_UROK/365;
a
rocny_urok je numeric(11,2) a ma 2 des. mista a 365 ma 0 des.mist
tudiz 17.6/365 = 0.04
reseni by melo byt:
UROKOVY_KOEFICIENT=ROCNY_UROK/cast(365 as double precision);
nebo mozna
UROKOVY_KOEFICIENT=ROCNY_UROK/365.00000000000000;
peca
Odpovedá: Roland Turcan
17. 12. 2002 12:04
>> dlho maturujem, ze co je trouble a zistil som ze v skripte sa vypocita
>> urokovy_koeficient ako 0.04 lebo 62.929=230*684*0.04/100;
<<< 17. 12. 2002 9:12 - Petr Palicka aka PeC@ "palicka.petr@seznam.cz" >>>
PPaP> no ba ze
PPaP> nedavno tu psal Pavel Cisar, ze vysledny pocet mist vysledku je dany
PPaP> prostym souctem desetinnych mist vsech operandu (nebo mozna trochu
PPaP> kecam), takze:
PPaP> UROKOVY_KOEFICIENT=ROCNY_UROK/cast(365 as double precision);
toto je to prave orechove.
Dakujem.
--
Best regards, TRoland
http://www.rotursoft.sk